home *** CD-ROM | disk | FTP | other *** search
- { Drip revisited - Modifications by Christopher J. Chandra
- Originally coded by Tim Mattison.
- This version works much much faster than the last one.
- I dunno if it is maximally optimized or not. Speed Demons?? *Grin* }
-
- uses crt; {386s needed for clrcrt procs}
-
- const SEGA000:Word=$a000; {needed for TP v6.0 or older}
-
- var yt:array[0..200] of word;
- timer:longint absolute $0040:$006c;
- tstart,tend:longint;
- xx,yy:word;
-
- {You can use Drip and Drip2 interchangably?; both operates on the same
- speed. The difference is in the calculation of the pixel position}
-
- procedure Drip;assembler;
- asm
- mov es,SEGA000
- mov dx,198 {for dx:=198 downto 0 do}
- @reloop1:
- xor si,si {for si:=0 to 319 do}
- @reloop2:
- mov bx,dx;shl bx,1;mov di,word ptr[yt+bx];add di,si
- mov al,[ES:DI] {al:=getcolor(si,dx}
- mov bx,dx;inc bx;mov cx,200;sub cx,bx;
- shl bx,1;mov di,word ptr[yt+bx];add di,si
- @again: {for cx:=dx+1 to 200 do}
- mov [ES:DI],al;add di,320 {putpixel(si,cx,al}
- loop @again
- inc si;cmp si,320;jl @reloop2 {end}
- dec dx;jnz @reloop1; {end}
- end;
-
- procedure Drip2;assembler;
- asm
- mov es,SEGA000
- mov dx,198 {for dx:=198 downto 0 do}
- @reloop11:
- xor si,si {for si:=0 to 319 do}
- @reloop22:
- mov ax,dx;mov di,ax;shl ax,8;shl di,6;add di,ax;add di,si
- mov bl,[ES:DI] {bl:=getcolor(si,dx}
- mov ax,dx;inc ax;mov cx,200;sub cx,ax
- mov di,ax;shl ax,8;shl di,6;add di,ax;add di,si
- @again1: {for cx:=dx+1 to 200 do}
- mov [ES:DI],bl;add di,320 {putpixel(si,cx,bl}
- loop @again1
- inc si;cmp si,320;jl @reloop22 {end}
- dec dx;jnz @reloop11; {end}
- end;
-
- begin
- for xx:=0 to 200 do yt[xx]:=xx*320; {prepare y table}
- asm mov ax,$13;int 10h {init 320x200x256c graphic mode}
- mov es,SEGA000;xor di,di;db $66;mov ax,$3232;dw $3232;mov cx,16000;db $66
- rep stosw end; {fill screen w/ some sort of blue}
-
- for xx:=0 to 255 do {set palette}
- begin
- port[$3c8]:=xx;
- port[$3c9]:=xx shr 3;port[$3c9]:=xx shr 2;port[$3c9]:=xx shr 1;
- end;
-
- for yy:=50 to 199-50 do {you can replace this w/ whatever}
- for xx:=50 to 320-50 do {thing that you want to drip}
- mem[$a000:yt[yy]+xx]:=yy and 255 + random(xx shr 2);
-
- tstart:=timer; {begin timer}
- drip2; {apply dripping fx - drip/drip2}
- tend:=timer; {stop timer}
-
- asm mov es,SEGA000;xor di,di;db $66;mov ax,$0000;dw $0000;mov cx,16000;
- db $66;rep stosw {fill screen w/ black}
- xor ax,ax;int 16h end; {get a keystroke}
-
- textmode(co80); {return to textmode 80x25 color}
- writeln(tend-tstart); {show time needed in microseconds}
- end.
-
- {Enjoy - CJC}---
- * Origin: The InterZone Cafe - Pembroke Pines FL USA (1:369/35)
- SEEN-BY: 135/52 94 292 416 369/14 32 35 69 74 92 101 135 137
- SEEN-BY: 369/169 396/1 3615/50 51
- PATH: 369/35 74 32 135/52 94 3615/50
-